Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
| Symbol | Value |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.
將整數轉羅馬數字,此題目與第12題相反。
若遇到4跟9這兩種數字,表示法會不一樣。4不會是IIII,而是IV,相當於5-1的意思,9不會是VIIII,而是IX,相當於10-1的意思,
以此類推,40 >> XL,90 >> XC。
輸入的範圍介於1 to 3999。
Input: III
Output: 3
Input: IV
Output: 4
Input: IX
Output: 9
Input: LVIII
Output: 58
這題相對於12題,算是簡單版的,
整體來說,只要將羅馬數字中相對應的數值加總,就可以得到答案,
有個例外,就是遇到4跟9的處理,譬如:IV,就不是相加了,而是5-1。
該如何處理這塊?
首先要找出,羅馬數字排列的規律,
我們可以發現它由左至右是從大到小排列的,也就是說左邊的羅馬數字通常會大於右邊的羅馬數字,除非遇到像是4或9這種的,那就必須相減(-)了。
先宣告陣列:
let romanNum = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
}
處理相加(+)或相減(-)的情況:
若左邊大於等於(>=)右邊,就相加(+),若左邊小於(<)右邊,就相減(-)
將參數轉陣列,宣告加總變數:
let strAry = s.split('');
let sum = 0;
若左邊小於(<)右邊,就相減(-),不然就相加(+):
for (let i = 0; i < strAry.length; i++) {
if (romanNum[strAry[i]] < romanNum[strAry[i + 1]]) {
sum -= Number(romanNum[strAry[i]]);
} else {
sum += Number(romanNum[strAry[i]]);
}
}
let romanNum = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
}
function romanToInt(s) {
let strAry = s.split('');
let sum = 0;
for (let i = 0; i < strAry.length; i++) {
if (romanNum[strAry[i]] < romanNum[strAry[i + 1]]) {
sum -= Number(romanNum[strAry[i]]);
} else {
sum += Number(romanNum[strAry[i]]);
}
}
return sum;
}